package main

import "fmt"

// 1️⃣ 目标接口（Target）
type ThreePinCharger interface {
	ChargeWithThreePins() // 客户端希望使用的充电方式
}

// 2️⃣ 适配者（Adaptee）：老式两脚插头充电器
type TwoPinCharger struct{}

func (t *TwoPinCharger) ChargeWithTwoPins() {
	fmt.Println("Charging with two-pin charger (Old method).")
}

// 3️⃣ 适配器（Adapter）：让 TwoPinCharger 适配 ThreePinCharger
type ChargerAdapter struct {
	OldCharger *TwoPinCharger
}

// 适配器实现新的充电方式，并调用旧的充电方法
func (a *ChargerAdapter) ChargeWithThreePins() {
	fmt.Println("Adapter converts three-pin request to two-pin charger.")
	a.OldCharger.ChargeWithTwoPins()
}

// 4️⃣ 客户端代码
func main() {
	// 老式两脚插头充电器
	oldCharger := &TwoPinCharger{}

	// 适配器将旧充电器适配到三脚插头接口
	adapter := &ChargerAdapter{OldCharger: oldCharger}

	// 客户端希望使用三脚插头充电
	adapter.ChargeWithThreePins()
}
